为了账号安全,请及时绑定邮箱和手机立即绑定

php session mysql存储

标签:
PHP

一直知道逻辑没实际用过,今天试用下!

session.gc_divisor   100
session.gc_maxlifetime 1440
session.gc_probability  1

以上三值很重要,session.gc_divisor决定了回收频率。测试时可以设置小点才有效果!

<?php
class Session
{
 /**
  * a database connection resource
  * @var resource
  */
 private static $_sess_db;

 /**
  * Open the session
  * @return bool
  */
 public static function open() {

   if (self::$_sess_db = mysql_connect('localhost:3306',
                     'root',
                     '123456')) {
     return mysql_select_db('sessions', self::$_sess_db);
   }
   return false;
 }

 /**
  * Close the session
  * @return bool
  */
 public static function close() {
   return mysql_close(self::$_sess_db);
 }

 /**
  * Read the session
  * @param int session id
  * @return string string of the sessoin
  */
 public static function read($id) {
   $id = mysql_real_escape_string($id);
   $sql = sprintf("SELECT `session_data` FROM `sessions` " .
           "WHERE `session` = '%s'", $id);
   if ($result = mysql_query($sql, self::$_sess_db)) {
     if (mysql_num_rows($result)) {
       $record = mysql_fetch_assoc($result);
       return $record['session_data'];
     }
   }
   return '';
 }

 /**
  * Write the session
  * @param int session id
  * @param string data of the session
  */
 public static function write($id, $data) {
   $sql = sprintf("REPLACE INTO `sessions` VALUES('%s', '%s', '%s')",
           mysql_real_escape_string($id),
           mysql_real_escape_string(time()),
           mysql_real_escape_string($data)
           );
   return mysql_query($sql, self::$_sess_db) or die("Invalid query: " . mysql_error());
;
 }

 /**
  * Destoroy the session
  * @param int session id
  * @return bool
  */
 public static function destroy($id) {
   $sql = sprintf("DELETE FROM `sessions` WHERE `session` = '%s'", $id);
   return mysql_query($sql, self::$_sess_db);
 }

 /**
  * Garbage Collector
  * @param int life time (sec.)
  * @return bool
  * @see session.gc_divisor   100
  * @see session.gc_maxlifetime 1440
  * @see session.gc_probability  1
  * @usage execution rate 1/100
  *    (session.gc_probability/session.gc_divisor)
  */
 public static function gc($max) {
   $sql = sprintf("DELETE FROM `sessions` WHERE `session_expires` < '%s'",
           mysql_real_escape_string(time() - $max));
   var_dump($sql);
   return mysql_query($sql, self::$_sess_db);
 }
}

ini_set('zend.enable_gc', 1);
ini_set('session.gc_probability', 1);
ini_set('session.save_handler', 'user');
session_set_save_handler(array('Session', 'open'),
            array('Session', 'close'),
            array('Session', 'read'),
            array('Session', 'write'),
            array('Session', 'destroy'),
            array('Session', 'gc')
            );

if (session_id() == "") session_start();
//session_regenerate_id(false); //also works fine
if (isset($_SESSION['counter'])) {
 $_SESSION['counter']++;
} else {
 $_SESSION['counter'] = 1;
}
echo '<br/>SessionID: '. session_id() .'<br/>Counter: '. $_SESSION['counter'];
?>

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
数据库工程师
手记
粉丝
52
获赞与收藏
361

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消